
# 可变化参数
"""
说明 ： 包括列表形式的可变化参数 和 字典形式的可变化参数

列表形式的可变化参数 ：在参数名前加一个*
def 函数名(*args):
    代码块

字典形式的可变化参数 ：在参数名前加一个**
def 函数名(**kwargs):
    代码块
"""

# 需求 ：
def add(x,y,*args):
    print(args)
    total = x + y + sum(args)
    return total


print(add(2,3))
# print(add(2,3,4))
# print(add(2,3,4,5))
# lst = [2,36,7,32,3]
# print(add(2,3,4,5,*lst))


def add1(x,y,**kwargs):
    print(kwargs)   # 字典
    total = x + y
    for x in kwargs.values():
        total += x
    return total

print("=============")
print(add1(3,4))
print(add1(3,4,a=5))
print(add1(3,4,a=5,b=8))
print(add1(3,4,**{'a':7,'b':12}))


# 函数的参数
"""
1.位置参数 ：最常见的一种参数，调用时必须是参数的个数和顺序保持一致 
2.关键字参数 ：在调用出可以使用key=value的形式进行传递，就可以不要关注参数的顺序 。
3.默认参数 ：在定义时给某参数设置一个默认值，当用户不传递该参数的值时，就走默认值 ，否则就走传递过来的值 。
4.可变化参数 ：
    列表形式的可变化参数 ：定义时需要再参数前加*，比如*args ,调用时可以使用位置参数，也可以直接以列表形式，比如*lst
    字典形式的可变化参数 ：定义时需要再参数前加**，比如*kwargs ,调用时可以使用关键字参数，也可以直接以字典形式，比如**dct
"""

# 练习1：写一个乘法的函数 ，但是不能直接相乘 ,举例 ： 3 * 4 = 3 + 3 + 3 + 3
def mul(x,y):
    total = 0
    for i in range(y):
        total += x
    return total
print(mul(3,5))

# 练习2：定义ip地址 ：12.12.12.12 ，判断并且测试是否是ip地址 。

# ip1 = '12.12.12.12'
"""
1. 每个数必须是0~255的数 ，不能字母，其它的字符
2. 必须是4个数
"""


def ip_addr(ip):
    INFO = "不是ip地址"
    lst = str(ip).split('.')
    if len(lst) != 4:
        return INFO
    for x in lst:
        if not x.isdigit():
            return INFO
        if int(x) < 0 or int(x)>255:
            return INFO

    return "此ip是一个正确的ip地址"

print(ip_addr("12.12.12"))
print(ip_addr("12.12.12.h"))
print(ip_addr("12.12.12.256"))
print(ip_addr("12.12.12.255"))

